﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using CapaDatos;

namespace CapaNegocio
{
   public class Asignacion:IBaseDeDatos
    {

        private int codigo;
        private DateTime fechaCreacion;
        private Constructor constructor;
        private OrdenTrabajo ordenTrabajo;
        private bool finalizado;

        public OrdenTrabajo OrdenTrabajo
        {
            get { return ordenTrabajo; }
            set { ordenTrabajo = value; }
        }

        public Constructor Constructor
        {
            get { return constructor; }
            set { constructor = value; }
        }


        public DateTime FechaCreacion
        {
            get { return fechaCreacion; }
            set { fechaCreacion = value; }
        }

        public int Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }

        public bool Finalizado
        {
            get { return finalizado; }
            set { finalizado = value; }
        }

        public static List<Asignacion> buscarAsignacionesEnCurso()
        {
            ArrayList asignaciones = ServidorDatos.buscarAsignacionesEnCurso();
            Asignacion asignacion;
            List<Asignacion> lista = new List<Asignacion>();
            foreach (ArrayList asig in asignaciones)
            {
                asignacion = new Asignacion();
                asignacion.buildObject(asig);
                lista.Add(asignacion);
            }
            return lista;

        }


        public static List<Asignacion> buscarAsignacionesEnCurso(int idConstructor)
        {
            ArrayList asignaciones = ServidorDatos.buscarAsignacionesEnCurso(idConstructor);
            Asignacion asignacion;
            List<Asignacion> lista = new List<Asignacion>();
            foreach (ArrayList asig in asignaciones)
            {
                asignacion = new Asignacion();
                asignacion.buildObject(asig);
                lista.Add(asignacion);
            }
            return lista;

        }

        public static List<Asignacion> buscarTodasLasAsignaciones(int idConstructor)
        {
            ArrayList asignaciones = ServidorDatos.buscarTodasLasAsignaciones(idConstructor);
            Asignacion asignacion;
            List<Asignacion> lista = new List<Asignacion>();
            foreach (ArrayList asig in asignaciones)
            {
                asignacion = new Asignacion();
                asignacion.buildObject(asig);
                lista.Add(asignacion);
            }
            return lista;

        }

        public void buildObject(System.Collections.ArrayList lista)
        {
            this.codigo = Convert.ToInt32(lista[0]);
            this.constructor= Constructor.buscarConstructor(Convert.ToInt32(lista[1]));
            this.ordenTrabajo = OrdenTrabajo.buscarOrden(Convert.ToInt32(lista[2]));
            this.fechaCreacion = Convert.ToDateTime(lista[3]);
            this.finalizado = Convert.ToBoolean(lista[4]);
        }


       public static int registrarAsignacion(Constructor c,OrdenTrabajo ot){

          return ServidorDatos.registrarAsignacion(c.Codigo, ot.Codigo);
       
       }

       public static Asignacion buscarAsignacion(OrdenTrabajo o)
       {
           ArrayList asig = ServidorDatos.buscarAsignacion(o.Codigo);
           if (asig.Count == 1)
           {
               Asignacion a = new Asignacion();
               a.buildObject((ArrayList)asig[0]);
               return a;
           }
           else
           {
               return null;
           }
       }


       public bool actualizarFinEtapa() {

           return ServidorDatos.actualizarFinEtapa(this.OrdenTrabajo.Codigo);
       }

       public bool eliminar()
       {
           if (EtapaObra.buscarEtapas(this.OrdenTrabajo.Codigo).Count == 0)
               return ServidorDatos.eliminarAsignacion(this.OrdenTrabajo.Codigo);
           else 
               return false;
       }
    }
}
